#ifndef _COMPILATION_FORWARD_H_
#define _COMPILATION_FORWARD_H_

namespace compilation
{

// Instructions.
class VirtualInstruction;
class IfInstruction;
class ExpressionInstruction;
class GotoInstruction;
class LabelInstruction;
class ReturnInstruction;
class EnterBlockInstruction;
class ExitBlockInstruction;
template <typename, typename...> class InstructionVisitor;

// Expressions.
class VirtualExpression;
class ConstantExpression;
class CharExpression;
class StringExpression;
class LocalVariableExpression;
class ParameterExpression;
class GlobalVariableExpression;
class ComparisonExpression;
class UnaryOperatorExpression;
class BinaryOperatorExpression;
class DereferenceExpression;
class ReferenceExpression;
class CastExpression;
class FunctionCallExpression;
class AssignExpression;
class PhiExpression;

// Types.
class VirtualType;
class BaseType;
class PointerType;

// Tasks.
class VirtualTask;
class VirtualAgenda;
class WorkListReusability;
class PrintAgenda;
class PrintTask;

// Tables.
class SymbolTable;
class Scope;

// Functions.
class Function;
class FunctionSignature;

// Programs.
class Program;
class ProgramParseContext;

} // compilation

#endif // _COMPILATION_FORWARD_H_
